package org.fpp.sqlparse;

import cn.hutool.core.io.IoUtil;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.Map;

/**
 * @author pengpeng_fu@infinova.com.cn
 * @date 2023-12-25 09:07
 */
public interface ISqlParseSupport {
    /**
     * 校验ddl sql是否时正常的可以解析的
     * @param sql ddL sql
     */
    void checkSql(String sql);

    /**
     * 解析ddl input stream
     * @param inputStream inputStream
     * @return 表结构
     */
    default Map<String, TableInfo> analysisDdl(InputStream inputStream){
        String read = IoUtil.read(inputStream, StandardCharsets.UTF_8);
        return analysisDdl(read);
    }

    /**
     * 解析ddl sql
     * @param sql sql
     * @return 表结构
     */
    Map<String, TableInfo> analysisDdl(String sql);

    /**
     * 通过表信息构建ddl sql
     * @param dbType dbType
     * @param tableInfo tableInfo
     * @return ddl sql
     */
    String buildDdlSql(DbType dbType, TableInfo tableInfo);

    /**
     * 获取表的增量更新的sql
     * @param dbType dbType
     * @param oldTableInfo oldTableInfo
     * @param newTableInfo newTableInfo
     * @return 增量更新sql
     */
    String incrementalUpdateSql(DbType dbType, TableInfo oldTableInfo, TableInfo newTableInfo);

    /**
     * 比较两个版本 获取差异
     * @param oldTableInfo oldTableInfo
     * @param newTableInfo newTableInfo
     * @return 差异
     */
    TableInfoDiff diff(TableInfo oldTableInfo, TableInfo newTableInfo);
}
